<?php

namespace Admin\Model;

/**
 * Description of PermissionModel
 *
 * @author 阿明 symphp@foxmail.com
 */
class PermissionModel extends \Think\Model{
    /**
     * 查询方法
     * @param string $find
     * @return mixed
     */
    public function getList($find = '*') {
        return $this->field($find)->order('lft asc')->where(array('status' => 1))->select();
    }
    
    /**
     * 添加权限
     * @return boolean
     */
    public function addPermission(){
         //创建nestedsets对象
        $nestedsets = $this->_get_nestedsets();
        //执行插入操作
        if($nestedsets->insert($this->data['parent_id'], $this->data, 'bottom')===false){
            $this->error = '创建失败';
            return false;
        }
        return true;
    }
    
    /**
     * 更新方法
     * @return boolean
     */
    public function updatePermission(){
        //是否移动了父级权限  通过id来查询parent_id看是否相等  getFieldByID('id','parent_id');
        $parent_id = $this->getFieldById($this->data['id'],'parent_id');
        //如果移动了就使用nestedsets
        if($this->data['parent_id']!=$parent_id){
            $nestedsets = $this->_get_nestedsets();
            if($nestedsets->moveUnder($this->data['id'], $this->data['parent_id'], 'bottom')===false){
                $this->error = '不能把后代权限设定为父级权限';
                return false;
            }
        }
        return $this->save();
    }
    
    public function delPermission($id){
        $permission_info = $this->where(array('id'=>$id))->getField('id,lft,rght');
        //使用setField where修改status的值
        $fond = array(
          'status'=> -1,
           'name'=>array('exp',"CONCAT(name,'_del')"),
        );
        //设置条件  要删除该分类下的权限
        $where = array(
            'lft'=>array('egt',$permission_info[$id]['lft']),
            'rght'=>array('elt',$permission_info[$id]['rght']),
        );
        return $this->where($where)->save($fond);
        
    }

    /**
     * 获取nestedsets对象.
     * @return \Admin\Service\NestedSets
     */
    private function _get_nestedsets(){
        //实例化model
        $mysql_db = new \Admin\Logic\DbmysqlLogic();
        //调用nestedsets
        return $nestedsets = new \Admin\Service\NestedSets($mysql_db, $this->trueTableName, 'lft', 'rght', 'parent_id', 'id', 'level');
    }
    
    
    
    
}
